<?php

/**
 * Pagina profile.php 
 * Gestisce la grafica legata al profilo
 */
require('php/inc/global.inc.php');


if (isset($_GET['action']))
    $smarty->assign("action", $_GET['action']);

foreach ($_POST as $key => $value) {
    $$key = $value;
}

$changepw_errors = array();

/**
 * Ricavo il parametro che passo in GET e carico l'utente in base all'username ricevuto
 */
$username = (isset($_GET['username']))?$_GET['username']:"";
$user_profile = User::loadUser($username);

/**
 * Eliminazione di un messaggio privato
 */
if(isset($_GET['mode']) && $_GET['mode'] == 'delete'){
    
    // controllo se il messaggio è mio
    $isMine = $user_profile->checkMessage($_GET['id']);
    
    // se sono il proprietario del messaggio che voglio eliminare allora lo cancello
    if($isMine)
        $user_profile->deleteMessage($_GET['id']);
}

/**
 * Invio messaggio privato
 */
if(isset($_REQUEST['sendpm'])){
    if(empty($_POST['pm_text']) || $_POST['pm_text'] == ""){
        $error_pm_text = "Il messaggio non pu&ograve; essere vuoto!";
        
    }else{
        if(empty($_POST['pm_title']) || $_POST['pm_title'] == ""){
            $error_pm_title = "Il titolo non può essere vuoto";
        }else{
            $prova = $user->sendPM(htmlentities($_POST['pm_title']),$_POST['pm_text'], $user_profile->username);
            KLogger::logToDB($user->username. " ha scritto un messaggio a " . $user_profile->username, $user->username, KLOGGER::USER);
            
            /*
             * if($prova)
             
                echo 'true';
            else
                echo 'false';
             * 
             */
        }
    }
    
}

/**
 * Invio messaggio di risposta
 */
if(isset($_REQUEST['reply'])){
    if(empty($_POST['reply_text']) || $_POST['reply_text'] == ""){
        $error_reply = "Il messaggio non pu&ograve; essere vuoto!";
        
    }else{
        $user->sendPMReply(htmlentities($_POST['reply_text']), $_POST['id_receiver'], $_POST['id_parent']);
        KLogger::logToDB($user->username. " ha risposto ad un messaggio di un messaggio a " . $_POST['id_receiver'], $user->username, KLOGGER::USER);
            
    }
    
}

/**
 * Cambiamento della password con gestione degli errori
 */
if (isset($_REQUEST['changepw'])) {
    if ($new_pw != $rnew_pw) {
        $changepw_errors['changepw_err_noteq'] = "Le due password non coincidono";
    }
    
    if ($old_pw == $new_pw) {
        $changepw_errors['changepw_err_eq'] = "Scegliere una password diversa da quella vecchia";
    }
    
    if (Form::validateField("oldpw", $old_pw, $user)) {
        $changepw_errors['changepw_err_oldpw'] = "La vecchia password non coincide";
    }

    if (count($changepw_errors) == 0) {
        
        $user->changePassword($new_pw);
        KLogger::logToDB($user->username. " ha cambiato la sua password", $user->username, KLOGGER::USER);
        
        $changepw_success = "Password cambiata con successo";
        
    }
}

/**
 * Caricamento immagine profilo con gestione degli errori
 */
if (isset($_REQUEST['upload'])) {
    $upload_errors = array();
    if (is_uploaded_file($_FILES['image']['tmp_name'])) {
        
        // Controllo che il file non superi 1MB
        if ($_FILES['image']['size'] > 1000000) {
            $upload_errors['size'] = "Il file non deve superare 1MB";
        }
        
        // Ottengo le informazioni sull'immagine
        list($width, $height, $type, $attr) = getimagesize($_FILES['image']['tmp_name']);
        
        // Controllo che le dimensioni (in pixel) non superino 160x180
        /* if (($width > 160) || ($height > 180)) {
          $upload_errors['dimension'] = "Dimensioni non corrette";
          break;
          } */
        
        // Controllo che il file sia in uno dei formati GIF, JPG o PNG
        if (($type != 1) && ($type != 2) && ($type != 3) && ($type != 4) && ($type != 5) && ($type != 6)) {
            $upload_errors['type'] = "Formato non corretto";
        }
        
        // Verifico che sul sul server non esista già un file con lo stesso nome
        // Se il file esiste già vuol dire che qualcuno ha inserito un immagine con lo stesso nome nello stesso millisecondi, quindi incremento di uno
        if (file_exists('upload/' . $_FILES['image']['name'])) {
            $ext_tmp = explode(".", $_FILES['image']['name']);
            $ext = '.' . $ext_tmp[1];

            $_FILES['image']['name'] = time() + 1 . $ext;
        }
    }

    /**
     * Se non si verificano errori nel caricamento dell'immagine procedo con l'upload sul server e l'aggiornamento dei dati sul DB
     */
    if (count($upload_errors) == 0) {

        $ext_tmp = explode(".", $_FILES['image']['name']);
        $ext = '.' . $ext_tmp[1];

        $_FILES['image']['name'] = time() . $ext;


        $target_path = "static/images/upload/";
        $target_path = $target_path . basename($_FILES['image']['name']);

        // Sposto il file nella cartella da me desiderata
        if (!move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) {
            $upload_errors['moving'] = "Erroe nel caricamento dell'immagine";
        } else {
            $user->editAvatar($target_path);
            KLogger::logToDB($user->username. " ha cambiato la sua immagine personale", $user->username, KLOGGER::USER);
        
        }
    }
}



/**
 * Carico i messaggi di risposta di un PM e creo la form per rispondere
 */
if(isset($_GET['mode'])){
    $smarty->assign("mode", $_GET['mode']);
    if($_GET['mode'] == 'view'){
        $replies = $user_profile->getMessageReplies($_GET['id']);
        $user_profile->setPMRead($replies[0]->id_message);
        $reply_form = new Form("POST", "profile.php?username=".$user_profile->username."&action=mail&mode=view&id=".$_GET['id']);
        $smarty->assign("openReplyForm", $reply_form->openForm());
        $smarty->assign("closeReplyForm", $reply_form->closeForm());

        $smarty->assign("textarea_reply", $reply_form->createTextArea("reply_text", 10, 50)); 
        $smarty->assign("input_hidden_idparent", $reply_form->createInput("id_parent", "id_parent", "hidden", $_GET['id'])); 
        $smarty->assign("input_hidden_receiver", $reply_form->createInput("id_receiver", "id_receiver", "hidden", $user->getPMReceiver($_GET['id']))); 

        $smarty->assign("submit_reply", $reply_form->createInput("reply", "reply", "submit", "Rispondi")); 
        $smarty->assign("form_error_reply", (isset($error_reply) ? $error_reply : ""));

        $smarty->assign("id_parent", $_GET['id']);
        $smarty->assign("replies", $replies);
    }
}

/**
 * Creo la form per l'invio di un PM
 */
if(isset($_GET['action'])){
    $smarty->assign("action", $_GET['action']);
    if($_GET['action'] == 'thread'){
        $recent_topics = Topic::getRecentTopics($user_profile->username);
        $fav_topics = Topic::getFavorites($user_profile->username);
        $smarty->assign("favorite_topics", $fav_topics);
        $smarty->assign("recent_topics", $recent_topics);
    }
    if($_GET['action'] == 'pm'){
        $pm_form = new Form("POST", "profile.php?username=".$user_profile->username."&action=pm");
        $smarty->assign("openPMForm", $pm_form->openForm());
        $smarty->assign("closePMForm", $pm_form->closeForm());

        $smarty->assign("label_title", $pm_form->createLabel("Titolo: "));
        $smarty->assign("input_title", $pm_form->createInput("pm_title", "pm_title", "text")); 
        $smarty->assign("textarea_pm", $pm_form->createTextArea("pm_text", 10, 50));
        
        $smarty->assign("submit_pm", $pm_form->createInput("sendpm", "sendpm", "submit", "Invia")); 
        $smarty->assign("form_error_pm_title", (isset($error_pm_title) ? $error_pm_title : ""));
        $smarty->assign("form_error_pm_text", (isset($error_pm_text) ? $error_pm_text : ""));
    }
}

/**
 * Creo la form per l'upload di una nuova immagine
 */
$upload_form = new Form("POST", "profile.php?username=".$user_profile->username, "multipart/form-data");

$smarty->assign("openUploadForm", $upload_form->openForm());
$smarty->assign("closeUploadForm", $upload_form->closeForm());

$smarty->assign("label_img", $upload_form->createLabel("Seleziona"));
$smarty->assign("input_img", $upload_form->createInput("upload_img", "image", "file")); 
$smarty->assign("submit_img", $upload_form->createInput("upload", "upload", "submit", "Carica")); 


/**
 * Creo la form per il cambiamento della password
 */
$changepw_form_action = "profile.php?username=".$user_profile->username."&action=edit";
$changepw_form = new Form("POST", $changepw_form_action);


$smarty->assign("openChangepwForm", $changepw_form->openForm());
$smarty->assign("closeChangepwForm", $changepw_form->closeForm());

$smarty->assign("label_oldpw", $changepw_form->createLabel("Vecchia password"));
$smarty->assign("label_newpw", $changepw_form->createLabel("Nuova password"));
$smarty->assign("label_rnewpw", $changepw_form->createLabel("Ripeti password"));
$smarty->assign("input_oldpw", $changepw_form->createInput("old_pw", "old_pw", "password")); 
$smarty->assign("input_newpw", $changepw_form->createInput("new_pw", "new_pw", "password")); 
$smarty->assign("input_rnewpw", $changepw_form->createInput("rnew_pw", "rnew_pw", "password")); 
$smarty->assign("submit_changepw", $upload_form->createInput("changepw", "changepw", "submit", "Cambia")); 
$smarty->assign("form_changepw_err_oldpw", (isset($changepw_errors['changepw_err_oldpw']) ? $changepw_errors['changepw_err_oldpw'] : ""));
$smarty->assign("form_changepw_err_newpw", (isset($changepw_errors['changepw_err_eq']) ? $changepw_errors['changepw_err_eq'] : ""));
$smarty->assign("form_changepw_err_samepw", (isset($changepw_errors['changepw_err_noteq']) ? $changepw_errors['changepw_err_noteq'] : ""));
$smarty->assign("changepw_success", (isset($changepw_success)?$changepw_success:""));

$smarty->assign("user_profile", $user_profile);

if($user_profile != false){
    $smarty->assign("mail", $user_profile->getMessages());
}

// carica l'HTML tramite smarty
$smarty->display($PAGES_URL . 'header.tpl');
$smarty->display($PAGES_URL . 'menu.tpl');

/**
 * Se tramite GET si prova ad accedere ad un utente che non esiste carico la pagina di errore [?username=qualcosachenonesiste]
 */
if($user_profile != false){
    $smarty->display($PAGES_URL . 'submenu.tpl');
    $smarty->display($PAGES_URL . 'profile.tpl');
}else{
    $smarty->display($PAGES_URL . 'error.tpl');
}
$smarty->display($PAGES_URL . 'footer.tpl');
?>
